#ifndef CREATION_H
#define CREATION_H

#include <SDL.h>
#include <SDL/SDL_ttf.h>
#include "lecture.h"
#include "paint.h"
#include "dim.h"

    /* Fonction cree par Thibault :
        Supprime toutes les pieces déjà jouées et remet la plateau vide */
    void reset_plateau() ;

    /*Fonction modifié par Thibault :
        Test si les coordonnées données correspondent à un carré d'une liste de carrée donnée */
    int selection_carre_crea(int abscisse,int ordonner,int x, int y, list_carre * lc);

    /*Fonction modifié par Thibault :
        Test lors d'un clic de souris quel objet est visé (boutons/pièces) et appelle d'autres fonctions en conséquences */
    void selection_creation(int x, int y, SDL_Surface * screen) ;

    /*Fonction modifié par Thibault :
        Donne l'ordonnée pour qu'une pièce soit alignée avec le plateau*/
    int ordo_sur_plateau_crea() ;

    /*Fonction modifié par Thibault :
        Donne l'ordonnée pour qu'une pièce soit alignée avec le plateau*/
    int absci_sur_plateau_crea() ;

    /*Fonction modifié par Thibault :
        Test si le curseur est positionné sur le plateau */
    int curseur_sur_plateau_crea(int x,int y) ;

    /*Fonction modifié par Thibault :
        Test si la pièce sélectionnée peut être lachée: elle doit être hors de la liste à gauche et du bandeau en haut */
    int pouvoir_lacher_crea() ;

    /*Fonction cree par Thibault :
        Test si la pièce est adjacente à une des pièces déjà posées sur le plateau */
    int est_adjacent_pieces_jouees(int adjacent, int abscisse, int ordonner, carre * carre_jouer, carre * carre_temoin, piece * piece_temoin) ;

    /*Fonction cree par Thibault :
        Test si une pièce peut être placée sur le plateau: pas de pièces superposées et au moins une pièce adjacente */
    int accepter_sur_plateau_crea() ;

    /*Fonction cree par Thibault :
        Permet lors de l'ajout d'une pièce au plateau que l'abscisse des carrées du plateau soit bien décalées comme il faut*/
    void remise_a_zero_coordonnees_carres(int abscisse_neg_max, int ordonner_neg_max) ;

    /*Fonction cree par Thibault :
        Permet lors du recentrage du plateau de redéplacer toutes les pièces pour qu'elles restent alignées avec le plateau (cas différent selon ajout de la pièce haut/bas et droite/gauche)*/
    void decaler_pieces_jouees(int insert_up, int insert_left) ;

    /*Fonction cree par Thibault :
        Permet lors du changement de la taille des carrés de bien redimensionner les pièces pour qu'elles restent alignées avec le plateau */
    void redimensionner_pieces_jouees(int last_t, int new_t) ;

    /*Fonction cree par Thibault :
        Permet de remettre à jour la hauteur et la largeur du plateau avec renvoie de la hauteur et la largeur enlevée si elle a été enlevée par le haut ou par la gauche*/
    void modification_dimensions_plateau (int * remove_up, int * remove_left) ;

    /*Fonction cree par Thibault :
        Permet d'ajouter une pièce sur le plateau (ajout de la pièce selectionné dans la liste des pièces jouées + modification du plateau avec ajout de carrés) */
    void ajouter_piece_plateau(piece * p) ;

    /*Fonction cree par Thibault :
        Permet d'enlever une pièce sur le plateau (retrait et suppression de la pièce selectionné dans la liste des pièces jouées + modification du plateau avec retrait de carrés) */
    void enlever_piece_plateau(piece * p) ;

    /*Fonction cree par Thibault :
        Fonction qui crée une liste de carrés à éclairer identique à la pièce sélectionnée alignés avec le plateau s*/
    void eclaire_case_crea() ;

    /*Fonction cree par Thibault :
        Fonction qui permet de gérer les évenements */
    void HandleEventInCrea (SDL_Event event, SDL_Surface * screen) ;

    /*Fonction cree par Thibault :
        Fonction principale qui gère tout le processus de création */
    void CreerPentomino(SDL_Surface * screen, char * chemin_niveau);

#endif

